/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Biblioteca;

import GUI.Jogo.FrameJogo;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * VerificaErros
 *
 * Versao 1.0
 *
 * Data Criação 10/10/2013
 *
 * @author Igor
 */
public abstract class VerificaErros {

    //Atributos
    private static ErrosFirebird erroFirebird;
    private static ErrosMySQL errosMySQL;

    //Outros Metodos
    public static String retornaMensagemErro(Exception e) {
        String msg = "";
        String diretorioArquivoErro = "";

        FrameJogo.ocorreuErro = true;
        
        try {
            diretorioArquivoErro = gravaMsgErro(e);
        } catch (Exception ex) {

        }

        if (e instanceof java.nio.file.NoSuchFileException) {
            msg = "Arquivo não encontrado:\n"
                    + e.getMessage();
        } else if (e.toString().contains("firebird")) {
            msg = "Erro de Banco de Dados, Firebird:\n"
                    + erroFirebird.retornaMensagemErro(e);
        } else if (e.toString().contains("mysql")) {
            msg = "Erro de Banco de Dados, MySQL:\n"
                    + errosMySQL.retornaMensagemErro(e);
        } else if (e.toString().contains("PortForwardingL: local port")
                && e.toString().contains("cannot be bound")) {
            msg = "Erro de conexão:\nImpossível criar conexão, pois a porta local pode estar em uso.";

        }else if (e.toString().contains("Connection timed out")){

            msg = "Uma tentativa de conexão expirou.\n"
                    + "\n"
                    + "Possibilidades:\n"
                    + "O host pode estar off-line;\n"
                    + "A conexão com a internet pode estar com problemas.";

        } else {
            msg = "Erro desconhecido, entre em contato com o suporte técnico!";
        }
        

        msg = msg + "\nMensagem:\n" +
                    e.getMessage()+"\n" +
                    "\nMensagem Completa:\n" +
                    e.toString() +"\n"+
                    "\n\nUm arquivo com informações detalhadas, sobre erro, foi armazedo em:\n" + diretorioArquivoErro;

        e.printStackTrace();
        return msg;
    }

    private static String gravaMsgErro(Exception e) throws Exception {
        String data = "dd_MM_yyyy";
        String hora = "h_mm_ssSSSS";
        String data1, hora1;

        java.util.Date agora = new java.util.Date();;
        SimpleDateFormat formata = new SimpleDateFormat(data);
        data1 = formata.format(agora);
        formata = new SimpleDateFormat(hora);
        hora1 = formata.format(agora);

        Calendar cal = Calendar.getInstance();
        /*Dia*/ int day = cal.get(Calendar.DATE);
        /*Mes*/ int month = cal.get(Calendar.MONTH) + 1;
        /*Ano*/ int year = cal.get(Calendar.YEAR);
        /*Numero do dia da semana*/ int dow = cal.get(Calendar.DAY_OF_WEEK);
        /*Numero do dia do mes*/ int dom = cal.get(Calendar.DAY_OF_MONTH);
        /*Numero do dia do ano*/ int doy = cal.get(Calendar.DAY_OF_YEAR);

        String diretorio = "./Erros/" + year + "/" + month + "/" + day + "/";
        new File(diretorio).mkdirs();

        diretorio = diretorio + hora1 + ".properties";
        FileWriter arq = new FileWriter(diretorio);  // Chamou e nomeou o arquivo txt.  
        PrintWriter gravarArq = new PrintWriter(arq);
        gravarArq.println("NomePC=" + InetAddress.getLocalHost().getHostName());
        gravarArq.println("IP=" + InetAddress.getLocalHost().getHostAddress());
        gravarArq.println("Data=" + data1);
        gravarArq.println("Hora=" + hora1);
        gravarArq.println();
        gravarArq.println("Mensagem=" + e.getMessage());
        gravarArq.println("Mensagem_Completa=" + e.toString());
        //Grava mensagem completa
        gravarArq.println();
        gravarArq.println("Excecao_Gerada=");
        e.printStackTrace(gravarArq);
        arq.close();
        return diretorio;
    }
}
